package com.kaifamiao.coordinate;

/**
 * 练习:
 * 1、第一个线程输出A，第二个线程输出B，第三个线程输出C
 * 2、创建并启动三个线程，让三个线程协调运行，输出 ABCABCABCABC....
 */
public class CoordinateTest1 {

    public static void main(String[] args) throws InterruptedException {
        String name = Thread.currentThread().getName();
        System.out.printf("%s线程开始\n", name);

        final Object lock = new Object();

        Thread t = new Thread( () -> {
            String threadName = Thread.currentThread().getName();
            System.out.printf("%s线程开始\n", threadName);
            synchronized (lock) {
                try {
                    System.out.printf("%s线程即将释放同步锁\n", threadName);
                    lock.wait(); // 当前线程会释放同步锁进入等待池
                    System.out.printf("%s线程恢复运行\n", threadName);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            System.out.printf("%s线程结束\n", threadName);
        }, "孙悟空");

        t.start();

        Thread.sleep( 500L );
        synchronized ( lock ) {
            // lock.notifyAll(); // 唤醒等待池使用lock作为同步锁的所有线程
            lock.notify(); // 唤醒等待池使用lock作为同步锁的线程中的任意一个线程
        } // 执行完同步代码块就会释放同步锁

        System.out.printf("%s线程结束\n", name);
    }

}
